﻿using Nx.ViewModels;
using System;

namespace Nx.UI.Navigation
{
    public interface INavigationModel : IDisposable
    {
        #region Frame Navigation
        void GoBack();
        void GoHome();
        void GoForward();
        void NavigateTo(object key);
        void NavigateTo(object key, INavigationArgument argument);
        #endregion

        #region Registration
        void RegisterView(object key, INavigationTarget target);
        void Register(object key, INavigationTarget target);
        void Register(object key, Type viewModelType, INavigationTarget target);
        void RegisterViewModel(object key, Type viewModelType);
        void UnRegister(object key);
        #endregion
    }

    public interface INavigationModel<T> : IDisposable
    {
        #region Frame Navigation
        void NavigateTo(T type);
        void NavigateTo(T type, INavigationArgument argument);
        #endregion

        #region Registration
        void Register(T type, INavigationTarget target);
        void Register<TViewModel>(T Type, INavigationTarget target) where TViewModel : ViewModelBase;
        void Register(T Type, Type viewModelType, INavigationTarget target);
        void UnRegister(T type);
        #endregion
    }
}
